package com.lxl.todo;

import java.util.HashSet;


/**
 * 无重复字符的最长子串
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长 子串 的长度。
 * 输入: s = "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 */
public class Solution7 {
    public int lengthOfLongestSubstring2(String s) {
        HashSet<Character> set = new HashSet<Character>();
        int max = 0;int right = 0; int left = 0;
        char[] charArray = s.toCharArray();
        while (right < charArray.length) {
            if (!set.contains(charArray[right])) {
                set.add(charArray[right]);
                right++;
                max = Math.max(set.size(), max);
            } else {
                set.remove(charArray[left]);
                left++;
            }
        }
        max = Math.max(set.size(), max);
        return max;
    }

    public int lengthOfLongestSubstring(String s) {
//        判断没有字符串的情况
        if (s.isEmpty()) {
            return 0;
        }
        HashSet<Character> set = new HashSet<>();
        char[] charArray = s.toCharArray();
       int max = 0;
       int left = 0;
       int right = 0;
       int length = 0;
       while (right < charArray.length) {
           if (!set.contains(charArray[right])) {
               set.add(charArray[right]);
               length++;
               if (length > max) {
                   max = length;
               }
               right++;
           } else {
               while (set.contains(charArray[right])) {
                   set.remove(charArray[left]);
                   left++;
                   length--;
               }
               set.add(charArray[right]);
               length++;
               right++;
           }
       }
        return max;
    }

    public static void main(String[] args) {
        String s = "pwwkew";
        Solution7 solution7 = new Solution7();
        System.out.println(solution7.lengthOfLongestSubstring(s));
    }
}
